public class Main{
	public static void main(String[] args){
		char c1 = 'A';
		char c2 = '中';

		int n1 = 'A'; // 字母“A”的Unicodde编码是65
		int n2 = '中'; // 汉字“中”的Unicode编码是20013

		// 直接用转义字符\u+Unicode编码来表示一个字符
		char c3 = '\u0041'; // 'A',因为十六进制0041 = 十进制65
		char c4 = '\u4e2d'; // '中',因为十六进制4e2d = 十进制20013

		String s = "abc\"xyz"; // 包含7个字符: a, b, c, ", x, y, z

		String s = "ABC\n\u4e2d\u6587";  // 包含6个字符: A, B, C, 换行符, '中', '文'

		String s1 = "Hello";
		String s2 = "world";
		String s = s1 + " " + s2 + "!";
		System.out.println(s);

		int age = 25;
        String s = "age is " + age;
        System.out.println(s); // 用+连接字符串和其他数据类型，会将其他数据类型先自动转型为字符串，再连接

        String s = "first line \n"
         + "second line \n"
         + "end"; // 使用+号连接会非常不方便

         // 从Java 13开始，字符串可以用"""..."""表示多行字符串（Text Blocks）了
        String s = """ SELECT * FROM users WHERE id > 100 ORDER BY name DESC """;
        System.out.println(s);

        // String是一个引用类型外，还有个重要特点，就是字符串不可变。
        String s = "hello";
        System.out.println(s); // 显示 hello
        s = "world"; // 将"world"
        System.out.println(s); // 显示 world


        String s1 = null; // s1是null
        String s2; // 没有赋初值值，s2也是null
        String s3 = s1; // s3也是null
        String s4 = ""; // s4指向空字符串,不是null


        //请将一组int值视为字符的Unicode编码，然后将它们拼成一个字符串
        int a = 72;
        int b = 105;
        int c = 65281;
        // FIXME:
        String s = "\u" + a + "\u" + b + "\u" + c;
        System.out.println(s);
	}
}

/*
字符串类型
和char类型不同，字符串类型String是引用类型，我们用双引号"..."表示字符串。

因为字符串使用双引号"..."表示开始和结束，那如果字符串本身恰好包含一个"字符怎么表示？例如，"abc"xyz"，编译器就无法判断中间的引号究竟是字符串的一部分还是表示字符串结束。这个时候，我们需要借助转义字符\

常见的转义字符包括：
	\" 表示 字符"
	\' 表示 字符'
	\\ 表示 字符\
	\n 表示 换行符
	\r 表示 回车符
	\t 表示 Tab
	\u#### 表示 一个Unicode编码的字符

从Java 13开始，字符串可以用"""..."""表示多行字符串（Text Blocks）了


最后，由于多行字符串是作为Java 13的预览特性（Preview Language Features）实现的，编译的时候，我们还需要给编译器加上参数：
	javac --source 13 --enable-preview Main.java


不可变特性
Java的字符串除了是一个引用类型外，还有个重要特点，就是字符串不可变。


执行String s = "hello";时，JVM虚拟机先创建字符串"hello"，然后，把字符串变量s指向它

紧接着，执行s = "world";时，JVM虚拟机先创建字符串"world"，然后，把字符串变量s指向它

原来的字符串"hello"还在，只是我们无法通过变量s访问它而已。因此，字符串的不可变是指字符串内容不可变。


空值null
引用类型的变量可以指向一个空值null，它表示不存在，即该变量不指向任何对象。


小结
	Java的字符类型char是基本类型，字符串类型String是引用类型;

	基本类型的变量是“持有”某个数值，引用类型的变量是“指向”某个对象;

	引用类型的变量可以是空值null;

	要区分空值null和空字符串""。
	*/